/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mx.itschapala.dsw2.biblioteca8a.bl;

import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import mx.itschapala.dsw2.biblioteca8a.dao.DetallePrestamoDaoLocal;
import mx.itschapala.dsw2.biblioteca8a.dao.PrestamoDaoLocal;
import mx.itschapala.dsw2.biblioteca8a.enumeracion.EstadoDetallePrestamo;
import mx.itschapala.dsw2.biblioteca8a.enumeracion.EstadoPrestamo;
import mx.itschapala.dsw2.biblioteca8a.enumeracion.EstadoServicio;
import mx.itschapala.dsw2.biblioteca8a.modelo.DetallePrestamo;
import mx.itschapala.dsw2.biblioteca8a.modelo.Libro;
import mx.itschapala.dsw2.biblioteca8a.modelo.Prestamo;
import mx.itschapala.dsw2.biblioteca8a.modelo.Usuario;

/**
 *
 * @author RaygozaL
 */
@Stateless
public class PrestamoBL implements PrestamoBLLocal {
    @EJB
    private DetallePrestamoDaoLocal detallePrestamoDao;
    @EJB
    private PrestamoDaoLocal prestamoDao;
    
    

    @Override
    public List <Prestamo> getAll() {
        return prestamoDao.findAll();
    }

  
    
    @Override
    public EstadoServicio modify(Prestamo Prestamo) {
         if(Prestamo.getId()==null||prestamoDao.find(Prestamo.getId())==null){
            return EstadoServicio.INCOMPLETE;
    //nada
    }else{
       prestamoDao.edit(Prestamo);
       return  EstadoServicio.COMPLETE;
        }
    }

    
    @Override
    public EstadoServicio register(Prestamo Prestamo) {
         if(prestamoDao.findDuplicity(Prestamo)){
            return EstadoServicio.INCOMPLETE;
    //nada
    }else{
       prestamoDao.create(Prestamo);
       return  EstadoServicio.COMPLETE;
        }
    }
    
    
    @Override
    public EstadoServicio delete(Prestamo Prestamo) {
        if(Prestamo.getId()==null||prestamoDao.find(Prestamo.getId())==null){
            return EstadoServicio.INCOMPLETE;
        }else{
        prestamoDao.remove(Prestamo);
        return EstadoServicio.COMPLETE;
        }
            
        
    }
    
    @Override
    public Prestamo findById(Integer id) {
        return prestamoDao.find(id);
    }

    @Override
     public EstadoServicio lendBooks(Usuario user, List<Libro> books) {
          List<Prestamo> prestamos = prestamoDao.findIncompleteByUser(user);
       int available = 3;
        for (Prestamo p: prestamos){
            available = available-detallePrestamoDao.findLends(p).size();
        }
        if (available<=0 || user.getId()== null || books.isEmpty() || books.size()>available){
            return EstadoServicio.INCOMPLETE;
        } else {
        Prestamo p = new Prestamo ();
        p.setIdusuario(user);
        p.setFecha(new Date());
        p.setHora(new Date ());
        p.setEstado(EstadoPrestamo.OPEN.ordinal());
        prestamoDao.create(p);
        for (Libro l: books){
          DetallePrestamo dp = new DetallePrestamo ();
          dp.setIdprestamo(p);
          dp.setIdlibro(l);
          dp.setEstado(EstadoDetallePrestamo.LEND.ordinal());
          detallePrestamoDao.create(dp);
        }
        return EstadoServicio.COMPLETE;
        }
     
     }
    
    
}
